15-3 う^

一般而言,伺服器會將執行 ASP 網頁的結果先存放在一個暫存區或緩衝區(Buffer),等到執行結束後,再將結果一併送到用戶端。但是,如果網頁的執行時間太久,可能造成使用者等待過久,甚至以為伺服器已經掛了,要解決這個問題,最快的方法,就是將 Response.Buffer 設定成 false,此時只要執行的過程中有任何輸出,就會被立刻送到用戶端,範例如下:

Example(response/buffer01.asp):

上述範例的原始檔如下:

原始檔(response/buffer01.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<%Response.Buffer=false%>
<%title="Response.Buffer的範例"%>
<!--#include file="../head.inc"-->
<hr>

<%
function delayFunction(n){
	for (var j=0; j<n; j++);	// 延遲時間的空迴圈
}
n=10000000;
%>
由於 Response.Buffer=false,以下的文字會慢慢依序出現:
<% delayFunction(n) %><p>跑完第一次
<% delayFunction(n) %><p>跑完第二次
<% delayFunction(n) %><p>跑完第三次

<hr>
<!--#include file="../foot.inc"-->

特別要注意的是:Response.Buffer 所包含的資訊也是屬於表頭資訊,因此它必須出現在任何網頁內容之前,以避免造成可能發生的錯誤。(可能發生什麼錯誤呢?請讀者們想想。)

下面這個範例,使用 Buffer、Flush、Clear、End 等方法來控制伺服器對緩衝區資料的傳送:

Example(response/buffer02.asp):

上述範例的原始檔如下:

原始檔(response/buffer02.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<%Response.Buffer=true%>
<%title="Response.Buffer、Flush、Clear、End 的範例"%>
<!--#include file="../head.inc"-->
<hr>

我把緩衝區的內容立刻送到客戶端,所以這是你看得到的內容。
<br><!--#include file="../foot.inc"-->
<%Response.Flush;%>

<p>我把緩衝區的內容清掉了,所以這是你看不到的內容。
<%Response.Clear;%>

<p>我又開始寫入緩衝區,所以這是你看得到的內容。

<%Response.End;%>
<p>這些都看不到,因為伺服器看到 Response.End,就不再傳送資料了!

在上述範例中,我們把伺服器回傳的資料放置於緩衝區(Buffer)中,並利用不同的方法來控制緩衝區的資料。

Hint
  • 請務必瞭解上述範例中,哪些資料會傳回用戶端、哪些資料不會傳回用戶端。
  • 若將上例的 Response.Buffer 改為 false,請問會發生什麼結果?請試看看!


JScript 程式設計與應用:用於伺服器端的 ASP 環境